home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / pastutor.EXE / tutor10.pas < prev    next >
Pascal/Delphi Source File  |  1998-04-02  |  9KB  |  375 lines

  1. {************************************************}
  2. {                                                }
  3. {   Turbo Vision 2.0 Demo                        }
  4. {   Copyright (c) 1992 by Borland International  }
  5. {                                                }
  6. {************************************************}
  7.  
  8. program Tutor10;
  9.  
  10. uses Memory, TutConst, Drivers, Objects, Views, Menus, App, Dialogs,
  11.   Editors, StdDlg, Validate;
  12.  
  13. type
  14.   POrder = ^TOrder;
  15.   TOrder = record
  16.     OrderNum: string[8];
  17.     OrderDate: string[8];
  18.     StockNum: string[8];
  19.     Quantity: string[5];
  20.     Payment, Received, MemoLen: Word;
  21.     MemoText: array[0..255] of Char;
  22.   end;
  23.  
  24.   POrderWindow = ^TOrderWindow;
  25.   TOrderWindow = object(TDialog)
  26.     constructor Init;
  27.     procedure HandleEvent(var Event: TEvent); virtual;
  28.   end;
  29.  
  30.   TTutorApp = object(TApplication)
  31.     ClipboardWindow: PEditWindow;
  32.     OrderWindow: POrderWindow;
  33.     constructor Init;
  34.     destructor Done; virtual;
  35.     procedure DoAboutBox;
  36.     procedure HandleEvent(var Event: TEvent); virtual;
  37.     procedure InitMenuBar; virtual;
  38.     procedure InitStatusLine; virtual;
  39.     procedure LoadDesktop;
  40.     procedure NewWindow;
  41.     procedure OpenOrderWindow;
  42.     procedure OpenWindow;
  43.     procedure SaveDesktop;
  44.     procedure SaveOrderData;
  45.     procedure ShowOrder(AOrderNum: Integer);
  46.   end;
  47.  
  48. var
  49.   ResFile: TResourceFile;
  50.   OrderInfo: TOrder;
  51.  
  52. const
  53.   ROrderWindow: TStreamRec = (
  54.      ObjType: 15001;
  55.      VmtLink: Ofs(TypeOf(TOrderWindow)^);
  56.      Load:    @TOrderWindow.Load;
  57.      Store:   @TOrderWindow.Store
  58.   );
  59.  
  60. procedure TutorStreamError(var S: TStream); far;
  61. var
  62.   ErrorMessage: String;
  63. begin
  64.   case S.Status of
  65.     stError: ErrorMessage := 'Stream access error';
  66.     stInitError: ErrorMessage := 'Cannot initialize stream';
  67.     stReadError: ErrorMessage := 'Read beyond end of stream';
  68.     stWriteError: ErrorMessage := 'Cannot expand stream';
  69.     stGetError: ErrorMessage := 'Unregistered type read from stream';
  70.     stPutError: ErrorMessage := 'Unregistered type written to stream';
  71.     end;
  72.   DoneVideo;
  73.   PrintStr('Error: ' + ErrorMessage);
  74.   Halt(Abs(S.Status));
  75. end;
  76.  
  77. constructor TOrderWindow.Init;
  78. var
  79.   R: TRect;
  80.   Field: PInputLine;
  81.   Cluster: PCluster;
  82.   Memo: PMemo;
  83. begin
  84.   R.Assign(0, 0, 60, 17);
  85.   inherited Init(R, 'Orders');
  86.   Options := Options or ofCentered;
  87.   HelpCtx := $F000;
  88.  
  89.   R.Assign(13, 2, 23, 3);
  90.   Field := New(PInputLine, Init(R, 8));
  91.   Field^.SetValidator(New(PRangeValidator, Init(1, 99999)));
  92.   Insert(Field);
  93.   R.Assign(2, 2, 12, 3);
  94.   Insert(New(PLabel, Init(R, '~O~rder #:', Field)));
  95.  
  96.   R.Assign(43, 2, 53, 3);
  97.   Field := New(PInputLine, Init(R, 8));
  98.   Field^.SetValidator(New(PPXPictureValidator,
  99.     Init('{#[#]}/{#[#]}/{##[##]}', True)));
  100.   Insert(Field);
  101.   R.Assign(26, 2, 41, 3);
  102.   Insert(New(PLabel, Init(R, '~D~ate of order:', Field)));
  103.  
  104.   R.Assign(13, 4, 23, 5);
  105.   Field := New(PInputLine, Init(R, 8));
  106.   Field^.SetValidator(New(PPXPictureValidator, Init('&&&-####', True)));
  107.   Insert(Field);
  108.   R.Assign(2, 4, 12, 5);
  109.   Insert(New(PLabel, Init(R, '~S~tock #:', Field)));
  110.  
  111.   R.Assign(46, 4, 53, 5);
  112.   Field := New(PInputLine, Init(R, 5));
  113.   Field^.SetValidator(New(PRangeValidator, Init(1, 99999)));
  114.   Insert(Field);
  115.   R.Assign(26, 4, 44, 5);
  116.   Insert(New(PLabel, Init(R, '~Q~uantity ordered:', Field)));
  117.  
  118.   R.Assign(3, 7, 57, 8);
  119.   Cluster := New(PRadioButtons, Init(R,
  120.     NewSItem('Cash   ',
  121.     NewSItem('Check  ',
  122.     NewSItem('P.O.   ',
  123.     NewSItem('Account', nil))))));
  124.   Insert(Cluster);
  125.   R.Assign(2, 6, 21, 7);
  126.   Insert(New(PLabel, Init(R, '~P~ayment method:', Cluster)));
  127.  
  128.   R.Assign(22, 8, 37, 9);
  129.   Cluster := New(PCheckBoxes, Init(R, NewSItem('~R~eceived', nil)));
  130.   Insert(Cluster);
  131.  
  132.   R.Assign(3, 10, 57, 13);
  133.   Memo := New(PMemo, Init(R, nil, nil, nil, 255));
  134.   Insert(Memo);
  135.   R.Assign(2, 9, 9, 10);
  136.   Insert(New(PLabel, Init(R, 'Notes:', Memo)));
  137.  
  138.   R.Assign(2, 14, 12, 16);
  139.   Insert(New(PButton, Init(R, '~N~ew', cmOrderNew, bfNormal)));
  140.   R.Assign(13, 14, 23, 16);
  141.   Insert(New(PButton, Init(R, '~S~ave', cmOrderSave, bfDefault)));
  142.   R.Assign(24, 14, 34, 16);
  143.   Insert(New(PButton, Init(R, 'Re~v~ert', cmOrderCancel, bfNormal)));
  144.   R.Assign(35, 14, 45, 16);
  145.   Insert(New(PButton, Init(R, 'Next', cmOrderNext, bfNormal)));
  146.   R.Assign(46, 14, 56, 16);
  147.   Insert(New(PButton, Init(R, 'Prev', cmOrderPrev, bfNormal)));
  148.   SelectNext(False);
  149. end;
  150.  
  151. procedure TOrderWindow.HandleEvent(var Event: TEvent);
  152. begin
  153.   inherited HandleEvent(Event);
  154.   if (Event.What = evBroadcast) and
  155.     (Event.Command = cmFindOrderWindow) then
  156.     ClearEvent(Event);
  157. end;
  158.  
  159. constructor TTutorApp.Init;
  160. var
  161.   R: TRect;
  162. begin
  163.   MaxHeapSize := 8192;
  164.   EditorDialog := StdEditorDialog;
  165.   StreamError := @TutorStreamError;
  166.   RegisterMenus;
  167.   RegisterObjects;
  168.   RegisterViews;
  169.   RegisterApp;
  170.   RegisterEditors;
  171.   RegisterDialogs;
  172.   RegisterValidate;
  173.   RegisterType(ROrderWindow);
  174.   ResFile.Init(New(PBufStream, Init('TUTORIAL.TVR', stOpenRead, 1024)));
  175.   inherited Init;
  176.   DisableCommands([cmStockWin, cmSupplierWin]);
  177.   Desktop^.GetExtent(R);
  178.   ClipboardWindow := New(PEditWindow, Init(R, '', wnNoNumber));
  179.   if ValidView(ClipboardWindow) <> nil then
  180.   begin
  181.     ClipboardWindow^.Hide;
  182.     InsertWindow(ClipboardWindow);
  183.     Clipboard := ClipboardWindow^.Editor;
  184.     Clipboard^.CanUndo := False;
  185.   end;
  186.   with OrderInfo do
  187.   begin
  188.     OrderNum := '42';
  189.     OrderDate := '01/15/61';
  190.     StockNum := 'AAA-9999';
  191.     Quantity := '1';
  192.     Payment := 2;
  193.     Received := 0;
  194.     MemoLen := 0;
  195.   end;
  196. end;
  197.  
  198. destructor TTutorApp.Done;
  199. begin
  200.   ResFile.Done;
  201.   inherited Done;
  202. end;
  203.  
  204. procedure TTutorApp.DoAboutBox;
  205. begin
  206.   ExecuteDialog(PDialog(ResFile.Get('ABOUTBOX')), nil);
  207. end;
  208.  
  209. procedure TTutorApp.HandleEvent(var Event: TEvent);
  210. var
  211.   R: TRect;
  212. begin
  213.   inherited HandleEvent(Event);
  214.   if Event.What = evCommand then
  215.   begin
  216.     case Event.Command of
  217.       cmOrderSave:
  218.         begin
  219.           SaveOrderData;
  220.           ClearEvent(Event);
  221.         end;
  222.       cmOrderWin:
  223.         begin
  224.           OpenOrderWindow;
  225.           ClearEvent(Event);
  226.         end;
  227.       cmOptionsLoad:
  228.         begin
  229.           LoadDesktop;
  230.           ClearEvent(Event);
  231.         end;
  232.       cmOptionsSave:
  233.         begin
  234.           SaveDesktop;
  235.           ClearEvent(Event);
  236.         end;
  237.       cmClipShow:
  238.         with ClipboardWindow^ do
  239.         begin
  240.           Select;
  241.           Show;
  242.           ClearEvent(Event);
  243.         end;
  244.       cmNew:
  245.         begin
  246.           NewWindow;
  247.           ClearEvent(Event);
  248.         end;
  249.       cmOpen:
  250.         begin
  251.           OpenWindow;
  252.           ClearEvent(Event);
  253.         end;
  254.       cmOptionsVideo:
  255.         begin
  256.           SetScreenMode(ScreenMode xor smFont8x8);
  257.           ClearEvent(Event);
  258.         end;
  259.       cmAbout:
  260.         begin
  261.           DoAboutBox;
  262.           ClearEvent(Event);
  263.         end;
  264.     end;
  265.   end;
  266. end;
  267.  
  268. procedure TTutorApp.InitMenuBar;
  269. begin
  270.   MenuBar := PMenuBar(ResFile.Get('MAINMENU'));
  271. end;
  272.  
  273. procedure TTutorApp.InitStatusLine;
  274. var
  275.   R: TRect;
  276. begin
  277.   StatusLine := PStatusLine(ResFile.Get('STATUS'));
  278.   GetExtent(R);
  279.   StatusLine^.MoveTo(0, R.B.Y - 1);
  280. end;
  281.  
  282. procedure TTutorApp.LoadDesktop;
  283. var
  284.   DesktopFile: TBufStream;
  285.   TempDesktop: PDesktop;
  286.   R: TRect;
  287. begin
  288.   DesktopFile.Init('DESKTOP.TUT', stOpenRead, 1024);
  289.   TempDesktop := PDesktop(DesktopFile.Get);
  290.   DesktopFile.Done;
  291.   if ValidView(TempDesktop) <> nil then
  292.   begin
  293.     Desktop^.Delete(ClipboardWindow);
  294.     Delete(Desktop);
  295.     Dispose(Desktop, Done);
  296.     Desktop := TempDesktop;
  297.     Insert(Desktop);
  298.     GetExtent(R);
  299.     R.Grow(0, -1);
  300.     Desktop^.Locate(R);
  301.     InsertWindow(ClipboardWindow);
  302.   end;
  303. end;
  304.  
  305. procedure TTutorApp.NewWindow;
  306. var
  307.   R: TRect;
  308.   TheWindow: PEditWindow;
  309. begin
  310.   R.Assign(0, 0, 60, 20);
  311.   TheWindow := New(PEditWindow, Init(R, '', wnNoNumber));
  312.   InsertWindow(TheWindow);
  313. end;
  314.  
  315. procedure TTutorApp.OpenOrderWindow;
  316. begin
  317.   if Message(Desktop, evBroadcast, cmFindOrderWindow, nil) = nil then
  318.   begin
  319.     OrderWindow := New(POrderWindow, Init);
  320.     InsertWindow(OrderWindow);
  321.   end
  322.   else
  323.     if PView(OrderWindow) <> Desktop^.TopView then OrderWindow^.Select;
  324.   ShowOrder(0);
  325. end;
  326.  
  327. procedure TTutorApp.OpenWindow;
  328. var
  329.   R: TRect;
  330.   FileDialog: PFileDialog;
  331.   TheFile: FNameStr;
  332. const
  333.   FDOptions: Word = fdOKButton or fdOpenButton;
  334. begin
  335.   TheFile := '*.*';
  336.   New(FileDialog, Init(TheFile, 'Open file', '~F~ile name',
  337.     FDOptions, 1));
  338.   if ExecuteDialog(FileDialog, @TheFile) <> cmCancel then
  339.   begin
  340.     R.Assign(0, 0, 75, 20);
  341.     InsertWindow(New(PEditWindow, Init(R, TheFile, wnNoNumber)));
  342.   end;
  343. end;
  344.  
  345. procedure TTutorApp.SaveDesktop;
  346. var
  347.   DesktopFile: TBufStream;
  348. begin
  349.   Desktop^.Delete(ClipboardWindow);
  350.   DesktopFile.Init('DESKTOP.TUT', stCreate, 1024);
  351.   DesktopFile.Put(Desktop);
  352.   DesktopFile.Done;
  353.   InsertWindow(ClipboardWindow);
  354. end;
  355.  
  356. procedure TTutorApp.SaveOrderData;
  357. begin
  358.   if OrderWindow^.Valid(cmClose) then
  359.     OrderWindow^.GetData(OrderInfo);
  360. end;
  361.  
  362. procedure TTutorApp.ShowOrder(AOrderNum: Integer);
  363. begin
  364.   OrderWindow^.SetData(OrderInfo);
  365. end;
  366.  
  367. var
  368.   TutorApp: TTutorApp;
  369.  
  370. begin
  371.   TutorApp.Init;
  372.   TutorApp.Run;
  373.   TutorApp.Done;
  374. end.
  375.